which was wrong, and not very useful.
Signed-off-by: Tim Deegan <Tim.Deegan@xensource.com>
gfn = guest_l1e_get_gfn(*new_gl1e);
gmfn = vcpu_gfn_to_mfn(v, gfn);
- mmio = (is_hvm_vcpu(v) && paging_vcpu_mode_translate(v) &&
- mmio_space(gfn_to_paddr(gfn)));
+ mmio = (is_hvm_vcpu(v) && paging_vcpu_mode_translate(v) && !mfn_valid(gmfn));
l1e_propagate_from_guest(v, new_gl1e, _mfn(INVALID_MFN), gmfn, &new_sl1e,
ft_prefetch, mmio);
return mfn_x(gfn_to_mfn_current(pfn));
}
-/* Is this guest address an mmio one? */
+/* Is this guest address an mmio one? (i.e. not defined in p2m map) */
static inline int mmio_space(paddr_t gpa)
{
- return (gpa >= 0xf0000000 /* 256MB hole just below 4GB */
- || (gpa >= 0xa0000 && gpa < 0xc0000)); /* VGA hole */
+ unsigned long gfn = gpa >> PAGE_SHIFT;
+ return !mfn_valid(mfn_x(gfn_to_mfn_current(gfn)));
}
/* Translate the frame number held in an l1e from guest to machine */